/**
 * 类名：MajorPaserHandler
 * 创建日期： 2014-10-22 下午3:37:49
 * 
 */
package com.erms.domain.handler;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.erms.bean.Department;
import com.erms.bean.Major;
import com.erms.util.LogUtil;
import com.erms.util.http.XmlParserHandler;

/**
 * @author hmb
 * 备注： 
 *
 */
public class MajorPaserHandler implements XmlParserHandler<Major> {
	private Logger logger = LogUtil.getLogger(getClass());
	/**
	 * @see com.erms.util.http.XmlParserHandler#onParse(org.jsoup.nodes.Document)
	 * @param document
	 * @return
	 */
	@Override
	public List<Major> onParse(Document document) {

		// TODO 自动生成的方法存根
		List<Major> majorList = new ArrayList<>();
		Elements selectElements = document.getElementsByAttributeValue(
				"name", "v_xsh_zyh");
		if (selectElements.size() != 0) {
			Elements majorElements = selectElements.select("option");
			int n = majorElements.size();
			logger.debug("共找到 " + n + " 条专业数据");
			try {
				//long oldTime = System.currentTimeMillis();
				for (int i = 0; i < n; i++) {
					Element majorElement = majorElements.get(i);
					String id = majorElement.attr("value").trim();
					logger.debug(id);
					if (id.startsWith("000")) {
						//学院编号为全零特殊处理
						id = id.replaceFirst("000", "0");
					}else {
						//去掉前面的0
						id = id.replaceFirst("^0*", "");
					}
					//经测试，发现教务处网站的这一部分的院系编号中，理学院存在冲突，有两种编号，分别为011和013
					//其中013包含011的全部专业，也许011是2011届以前的编号，这里舍弃011的数据
					Integer depID = Integer.valueOf(id.split("-")[0]);
					if (depID == 11 || depID == 57 || depID == 62) {
						
						logger.debug("跳过院系编号为11的理学院、辅修班57、南中医南理工班62的专业信息");
						continue;
					}
					
					String majorID = id.split("-")[1];
					if (depID == 58 && !majorID.contains("l")) {
						logger.debug("跳过国际教育学院非留学生专业的信息，其他学院已包括这些专业");
						continue;							
					}
					String name = majorElement.text().trim();
					logger.debug(name);
					//String depName = name.split("--")[0];
					String majorName = name.split("--")[1];
					
					Department department = new Department();
					department.setId(depID);
					//department.setName(depName);
					
					Major major = new Major();
					major.setId(majorID);
					major.setName(majorName);
					major.setDepartment(department);
					
					majorList.add(major);
					
					
				}
				//logger.debug("解析和持久化共计用时(ms): "+(System.currentTimeMillis()-oldTime));
			} catch (Exception e) {
				// TODO: handle exception
				logger.debug("发生未知错误，可能是解析格式错误", e);
			}

		} else {
			logger.debug("没有找到专业信息");
		}
		return majorList;
	}

	/**
	 * @see com.erms.util.http.XmlParserHandler#onError()
	 */
	@Override
	public void onError() {

		// TODO 自动生成的方法存根
		
	}

}
